home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / amiga / opalvisn / render.lha / Render.doc < prev    next >
Text File  |  1993-01-07  |  5KB  |  106 lines

  1.  
  2.  
  3.         Rendering to the OpalVision FrameBuffer.
  4.  
  5.  
  6.   This  example  code  is  provided  to  outline  the  main methods of
  7. rendering  to  the  OpalVision framebuffer from a typical 3D rendering
  8. package.  Renderer.c contains 4 functions:
  9.  
  10.     Open_OpalScreen (ULONG Modes);
  11.     Render_To_Opal (int Y,Lines,Width, UBYTE *R,*G,*B,BOOL Chunky);
  12.     Opal_Render_Finished (void);
  13.     Close_Opal (void);
  14.  
  15. Open_OpalScreen()  opens  an  OpalVision  screen, this screen can be a
  16. display  screen (in chip memory) or a virtual screen (in fast memory),
  17. see  'issues'  below.  Modes are the screenmodes defined in opallib.h,
  18. and can be any combination of HIRES24,ILACE24 and OVERSCAN24.
  19.  
  20. Render_To_Opal()  outputs  image  data to the frame buffer.  The image
  21. data  must  be  in  RGB  Byte format.  If 'Chunky' is FALSE, R,G and B
  22. point  to  3  individual  buffers each containing Lines*Width bytes of
  23. data.  If 'Chunky' is TRUE, R,G,B point to the start of the Red, Green
  24. and   Blue   data  within  one  large  interleaved  buffer  containing
  25. 3*Lines*Width bytes.  The data must be interleaved with 1 scan line of
  26. Red data, then Green data then blue data.
  27.  
  28. Opal_Render_Finished()   should   be  called  when  the  rendering  is
  29. finished, this function will make sure that the entire buffer has been
  30. updated properly.
  31.  
  32. Close_Opal()  should  be  called when you wish to cease display of the
  33. 24bit graphics.  The display will be turned off and all memory freed.
  34.  
  35.  
  36. The program RendTest.c is an example of using this code to display a 
  37. 24bit image, this simply generates a gradient in 24bit.
  38.  
  39.  
  40.             ISSUES
  41.     1. ChipRam
  42.  
  43. If  the  Renderer  is running on an Amiga with 1Meg of chip ram, there
  44. will  not  be enough memory to display a hires-interlaced 24bit image.
  45. In this case there are 2 options you can take.  The first is to open a
  46. display  screen in chip ram anyway, a screen will be opened containing
  47. the  maximum  number  of  lines  possible given the amount of chip ram
  48. available.  This will of course cause a number of lines to be black at
  49. the  bottom  of the screen, but will give the fastest update speed, if
  50. you  attempt  to  render past the bottom of the screen, the image data
  51. will be clipped.
  52.  
  53. The  second  method  is  to  open  a full sized screen in fast ram, to
  54. update  the  buffer,  LowMemUpdate24()  is  used  which can update the
  55. entire   image   while   only  using  a  small  amount  of  chip  ram.
  56. LowMemUpdate() however takes several frames for each update and blanks
  57. the  display  while  the update is occurring.  This will slow down the
  58. rendering  and  will  cause the display to flash, but will give a full
  59. screen view.
  60.  
  61. Renderer.c  will  check  if there is enough chip memory before opening
  62. the  screen,  if you define OPENVIRTUAL, it will use the second method
  63. and  open a screen in fast ram.  If OPENVIRTUAL is not defined it will
  64. open  the largest screen possible in chip ram.  The actual screen type
  65. open   is   transparent  to  the  program  calling  the  functions  in
  66. Renderer.c.
  67.  
  68. The  method  that  you  use  will  depend on your application, and the
  69. rendering  speed  required.   The  programs  'OneMeg' and 'TwoMeg' are
  70. provided  to  alter  the amount of chip ram in your machine so you can
  71. experiment with the two different methods.
  72.  
  73.     2. Horizontal Synchronisation.
  74.  
  75. Please   Read   the  Section  on  Horizontal  Synchronisation  in  the
  76. Programmers  reference  manual,  this  is  an  important issue to know
  77. about.
  78.  
  79. If you have an Intuition screen open, the best method to use is to set
  80. the  least  significant  bit  of blue of your background colour on you
  81. Intuition  screen before calling Open_OpalScreen() then reset it again
  82. after  calling  Close_Opal().   this  can  easily be achieved by using
  83. LoadRGB4().   For  example if the backgound colour is black (000), set
  84. it  to  001,  or  if its grey (888) set it to 889, only the background
  85. colour needs to be changed.  If this bit is already set (i.e.  blue is
  86. already odd), then you have no problems. If you are using this method,
  87. DO NOT define AUTOSYNC in Renderer.c
  88.  
  89. If  you  cannot  set  the  background  colour  for some reason, define
  90. AUTOSYNC  in  renderer.c,  this  will  set  the Opalvision buffer into
  91. AutoSync  mode  and  will  update  the framebuffer constantly to avoid
  92. horizontal shifting. 
  93.  
  94. Defining  AUTOSYNC  will degrade the Amiga's performance as there will
  95. be  CPU  contention accessing Chip Ram while the frame buffer is being
  96. updated,  if  AUTOSYNC  is  not defined, a 10 frame gap will be placed
  97. between each frame buffer update to give the CPU some breathing space.
  98.  
  99. If   you  have  any  questions,  please  contact  me  through  Centaur
  100. Development (310) 542-2226, or the OpalVision BBS (310) 793-7142.
  101.  
  102.  
  103.  
  104.                      Martin Boyd, Opal Technology.
  105.  
  106.